// import { DeviceEventEmitter } from 'react-native';

// import { RN_NOTIFICATION_EVENT_TYPE } from '@/constants';

// import { baseURLMiddle } from './http';
// class WebSocketSingleton {
//   private static instance: WebSocketSingleton | null = null;
//   private static connection: WebSocket | null = null;
//   // 最大重连次数
//   private maxReconnectCount = 5;
//   // 当前重连次数
//   private reconnectCount = 0;
//   // 重连间隔
//   private reconnectInterval = 5000;
//   public static getInstance(): WebSocketSingleton {
//     // 如果实例不存在，则创建新实例并返回；如果实例已存在，则直接返回现有实例
//     if (!WebSocketSingleton.instance) {
//       WebSocketSingleton.instance = new WebSocketSingleton();
//     }
//     return WebSocketSingleton.instance;
//   }
//   // 重连
//   private async reconnect(userId: string) {
//     this.reconnectCount++;
//     console.log(
//       `将在 ${this.reconnectInterval / 1000} 秒后尝试重新连接，尝试次数: ${this.reconnectCount}`,
//     );
//     console.log('userId', userId);
//     await new Promise(resolve => setTimeout(resolve, this.reconnectInterval));
//     WebSocketSingleton.connection = null;
//     WebSocketSingleton.getInstance().connect(userId);
//   }

//   private shouldReconnect(code?: number) {
//     if (!code) return false;
//     // 判断是否需要重连的逻辑
//     // code 参考: https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent/code#value
//     const reconnectCodes = [1001, 1006, 1012, 1013];
//     return reconnectCodes.includes(code) && this.reconnectCount < this.maxReconnectCount;
//   }

//   // 创建链接
//   connect(userId: string) {
//     // 如果没有userId或者链接已经存在，则不创建新的链接
//     if (
//       !userId ||
//       (WebSocketSingleton.connection?.readyState &&
//         WebSocketSingleton.connection.readyState !== WebSocket.CLOSED)
//     ) {
//       return;
//     }
//     // // 创建链接
//     WebSocketSingleton.connection = new WebSocket(
//       `wss://${baseURLMiddle}/rework-api/ws?clientId=${userId}&platform=3`,
//     );

//     if (WebSocketSingleton.connection === null) {
//       return;
//     }
//     // // 监听链接状态
//     WebSocketSingleton.connection.onopen = () => {
//       console.log('[OPEN] WebSocket opened ====');
//       setInterval(() => {
//         if (WebSocketSingleton.connection?.readyState === WebSocket.OPEN) {
//           WebSocketSingleton.connection.send(JSON.stringify({ cmd: 'ping' }));
//         }
//       }, 10 * 1000);
//     };
//     // 监听消息
//     WebSocketSingleton.connection.onmessage = e => {
//       console.log('[event data] WebSocket onmessage====', e.data, new Date().toLocaleTimeString());

//       try {
//         const res = JSON.parse(e.data);
//         if (res.code === 0 && res.type && res.type === 100) {
//           console.log('============== success =======================');
//           console.log(res.data, 'res.data');
//           console.log('=============== success ========================');
//           // 发起通知，更新作品列列表数据
//           DeviceEventEmitter.emit(RN_NOTIFICATION_EVENT_TYPE.UPDATE_USER_WORKS_LIST);
//           // 发起通知，生成作品成功
//           DeviceEventEmitter.emit(RN_NOTIFICATION_EVENT_TYPE.WORKS_GENERATE_SUCCESS, res.data);
//         }
//       } catch (error) {
//         console.log('Error parsing data', error);
//         return;
//       }
//     };
//     // 监听错误
//     WebSocketSingleton.connection.onerror = e => {
//       console.log('WebSocket error:', e.message);
//       this.reconnect(userId);
//     };
//     // 监听链接关闭
//     WebSocketSingleton.connection.onclose = e => {
//       if (this.shouldReconnect(e.code)) {
//         this.reconnect(userId);
//         return;
//       } else {
//         WebSocketSingleton.connection = null;
//       }
//       console.log('WebSocket closed:', e.code, e.reason);
//     };
//   }

//   close() {
//     if (WebSocketSingleton.connection) {
//       WebSocketSingleton.connection.close();
//       WebSocketSingleton.connection = null;
//     }
//   }
// }

// export default WebSocketSingleton;
